<?php

class Accounts extends Controller implements IExceptionHandler {

    public function ExceptionHandler(Exception $e) {
        $this->error = $e;
        if ($e instanceof AuthenticationException) {
            exit;
        } else {
            $this->view('main/index');
        }
    }

    private function Authenticate() {
        if ($this->user->get_id_profile_type() != PROFILE_SUPER_ADMINISTRATEUR) {
            global $MESSAGE_0001;
            throw new AuthenticationException($MESSAGE_0001);
        }
    }

    public function GET_view() {
        $this->Authenticate();
        $this->view('main/accounts/view');
    }

    public function GET_list() {
        $this->Authenticate();
        $this->view('main/accounts/list');
    }

    public function GET_create() {
        $this->Authenticate();
        $this->view('main/accounts/create');
    }

    public function POST_create() {
        $this->Authenticate();

        global $CHECK_CLIENT_NAME, $CHECK_DB_NAME, $CHECK_DATE;
        global $MESSAGE_0033, $MESSAGE_0034, $MESSAGE_0035, $MESSAGE_0036;

        // Vérification des droits entre le type de profil nécessaire à cette opération et le type de profil du user connecté
        if ($this->user->get_id_profile_type() != PROFILE_SUPER_ADMINISTRATEUR)
            throw new Exception($MESSAGE_0001);

        //Dans ce cas nous recevons des param POST, donc c'est un création à effectuer
        $PARAM_client_name = lib_check_param_post($_POST['client_name'], $CHECK_CLIENT_NAME);
        $PARAM_db_name = lib_check_param_post($_POST['db_name'], $CHECK_DB_NAME);
        $PARAM_opt_graph = lib_check_param_post(isset($_POST['opt_graph']) ? $_POST['opt_graph'] : 0);
        $PARAM_eai = lib_check_param_post(isset($_POST['eai']) ? $_POST['eai'] : 0);
        $PARAM_start_eai = lib_change_date_gui_to_mysql(lib_check_param_post($_POST['start_eai'], $CHECK_DATE));
        $PARAM_end_eai = lib_change_date_gui_to_mysql(lib_check_param_post($_POST['end_eai'], $CHECK_DATE));

        $tab_arg = array(':client_name' => $PARAM_client_name,
            ':db_name' => $PARAM_db_name,
            ':opt_graph' => $PARAM_opt_graph,
            ':eai' => $PARAM_eai,
            ':start_eai' => $PARAM_start_eai,
            ':end_eai' => $PARAM_end_eai
        );

        $this->user->obj_Account->create_client_account($tab_arg);

        //================================================================================================
        // Gestion du module EAI pour le client
        //================================================================================================
        if ($PARAM_eai == 1) {
            // Récupération des modèles EAI SIRH
            $dataEAITemplates = lib_get_eai_template();

            for ($inc = 0, $stop = (count($dataEAITemplates) - 1); $inc < $stop; $inc++) {
                $name = $dataEAITemplates[$inc][2];
                // S'il a été coché
                if (isset($_POST[$name])) {
//echo "<br/> ".$_POST['operation']." / ".$inc." / ".$name." / ".$_POST[$name]." / ".$_POST[$name."_designation_creation"]  ;
                    $PARAM_eai_id_template = lib_check_param_post($_POST[$name]);
                    $PARAM_designation = lib_check_param_post($_POST[$name . "_designation_creation"]);

                    $this->user->obj_Account->insert_eai_template($PARAM_eai_id_template, $name, $PARAM_designation, $PARAM_db_name);
                }
            }
        }
        //================================================================================================
        // Gestion de la personnalisation du logo pour un client
        //================================================================================================
        if ($PARAM_opt_graph == 1) {
            //Gestion des erreurs s'il y en a une
            switch ($_FILES['upload_logo']['error']) {
                case UPLOAD_ERR_NO_FILE :
                    throw new Exception(Strings::MESSAGE_0032);
                    break;
                case UPLOAD_ERR_INI_SIZE :
                    throw new Exception($MESSAGE_0033);
                    break;
                case UPLOAD_ERR_FORM_SIZE :
                    throw new Exception($MESSAGE_0034);
                    break;
                case UPLOAD_ERR_PARTIAL :
                    throw new Exception($MESSAGE_0035);
                    break;
                default :
                    //Pas d'erreur
                    break;
            }

            // Vérification si le type de fichier est valide
            // $extensions_valides = array( 'jpg', 'jpeg', 'gif', 'png');
            $extensions_valides = array('png');
            //1. strrchr renvoie l'extension avec le point (« . »).
            //2. substr(chaine,1) ignore le premier caractère de chaine.
            //3. strtolower met l'extension en minuscules.
            $extension_upload = strtolower(substr(strrchr($_FILES['upload_logo']['name'], '.'), 1));
            if (in_array($extension_upload, $extensions_valides)) {
                // Le logo du client a le même nom que la database par soucis de clarté
                $nom = PATH_LOGOS . $PARAM_db_name . "." . $extension_upload;
                $resultat = move_uploaded_file($_FILES['upload_logo']['tmp_name'], $nom);
                if (!$resultat)
                    throw new Exception(Strings::MESSAGE_0037);
            } else
                throw new Exception($MESSAGE_0036);
        }

        $this->view('main/index');
    }

    public function GET_update() {
        $this->Authenticate();
        $this->view('main/accounts/update');
    }

    public function POST_update() {
        $this->Authenticate();

        global $CHECK_CLIENT_NAME, $CHECK_DATE, $REQUEST_118;

        //Dans ce cas nous recevons bien des param POST, donc c'est un création à effectuer
        $PARAM_id_client_account = lib_check_param_post($_POST['id_client_account']);
        $PARAM_client_name = lib_check_param_post($_POST['client_name'], $CHECK_CLIENT_NAME);
        $PARAM_opt_graph = lib_check_param_post(isset($_POST['opt_graph']) ? $_POST['opt_graph'] : 0);
        $PARAM_eai = lib_check_param_post(isset($_POST['eai']) ? $_POST['eai'] : 0);
        $PARAM_start_eai = lib_change_date_gui_to_mysql(lib_check_param_post($_POST['start_eai'], $CHECK_DATE));
        $PARAM_end_eai = lib_change_date_gui_to_mysql(lib_check_param_post($_POST['end_eai'], $CHECK_DATE));

        $tab_arg = array(':id_client_account' => $PARAM_id_client_account,
            ':client_name' => $PARAM_client_name,
            ':opt_graph' => $PARAM_opt_graph,
            ':eai' => $PARAM_eai,
            ':start_eai' => $PARAM_start_eai,
            ':end_eai' => $PARAM_end_eai
        );

        $this->user->obj_Account->update_client_account($tab_arg);
        if ($this->user->obj_Account->get_id_client_account() == $PARAM_id_client_account) {
            $this->user->obj_Account = new Account($PARAM_id_client_account);
        }

        $db_name = $this->user->obj_Account->get_db_name($PARAM_id_client_account);
        if ($PARAM_eai == 1) {
            // Récupération des modèles EAI SIRH
            $dataEAITemplates = lib_get_eai_template();

            //On purge la table	eai_template pour la mise à jour
            db_request_delete($REQUEST_118, NULL, $db_name);

            for ($inc = 0, $stop = (count($dataEAITemplates) - 1); $inc < $stop; $inc++) {
                $name = $dataEAITemplates[$inc][2];
                // S'il a été coché
                if (isset($_POST["update_" . $name])) {
//echo "<br/> ".$_POST['operation']." / ".$inc." / ".$name." / ".$_POST["update_".$name]." / ".$_POST[$name."_designation_update"]  ;
                    $PARAM_eai_id_template = lib_check_param_post($_POST["update_" . $name]);
                    $PARAM_designation = lib_check_param_post($_POST[$name . "_designation_update"]);
                    $this->user->obj_Account->insert_eai_template($PARAM_eai_id_template, $name, $PARAM_designation, $db_name);
                }
            }
        }
        //================================================================================================
        // Gestion de la personnalisation du logo pour un client
        //================================================================================================
        if ($PARAM_opt_graph == 1 && $_FILES['upload_logo']['name'] != "") {
            //Gestion des erreurs s'il y en a une
            switch ($_FILES['upload_logo']['error']) {
                case UPLOAD_ERR_NO_FILE :
                    throw new Exception($MESSAGE_0032);
                    break;
                case UPLOAD_ERR_INI_SIZE :
                    throw new Exception($MESSAGE_0033);
                    break;
                case UPLOAD_ERR_FORM_SIZE :
                    throw new Exception($MESSAGE_0034);
                    break;
                case UPLOAD_ERR_PARTIAL :
                    throw new Exception($MESSAGE_0035);
                    break;
                default :
                    //Pas d'erreur
                    break;
            }

            // Vérification si le type de fichier est valide
            // extensions_valides = array( 'jpg', 'jpeg', 'gif', 'png');
            $extensions_valides = array('png');
            //1. strrchr renvoie l'extension avec le point (« . »).
            //2. substr(chaine,1) ignore le premier caractère de chaine.
            //3. strtolower met l'extension en minuscules.
            $extension_upload = strtolower(substr(strrchr($_FILES['upload_logo']['name'], '.'), 1));
            if (in_array($extension_upload, $extensions_valides)) {
                // Le logo du client a le même nom que la database par soucis de clarté
                $nom = $PATH_LOGO_CLIENT . $db_name . "." . $extension_upload;
                $resultat = move_uploaded_file($_FILES['upload_logo']['tmp_name'], $nom);
                if (!$resultat)
                    throw new Exception($MESSAGE_0037);
            } else
                throw new Exception($MESSAGE_0036);
        }

        $this->view('main/index');
    }

    public function POST_delete($id) {
        $this->Authenticate();
        $this->user->obj_Account->delete_client_account(array(':id_client_account' => $id));
        $this->view('main/index');
    }

}
